package com.transformer.ai.controller;

import com.transformer.ai.entity.vo.MessageVO;
import com.transformer.ai.repository.ChatHistoryRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RequiredArgsConstructor
@RestController
@RequestMapping("/ai/history")
public class ChatHistoryController {

    private final ChatHistoryRepository chatHistoryRepository;

    private final ChatMemory chatMemory;

    /**
     * 获取聊天记录会话id
     * @param type
     * @return
     */
    @GetMapping("/{type}")
    public List<String> getChatIds(@PathVariable("type") String type) {
        return chatHistoryRepository.getChatIds(type);
    }


        /**
     * 获取聊天记录
     * @param type 业务类型，如：chat、service、pdf
     * @param chatId 会话ID
     * @return 包含聊天记录的 MessageVO 列表
     */
    @GetMapping("/{type}/{chatId}")
    public List<MessageVO> getChatHistory(@PathVariable("type") String type, @PathVariable("chatId") String chatId) {
        // 从 chatMemory 中获取指定 chatId 的聊天记录列表，最多获取 Integer.MAX_VALUE 条消息。
        List<Message> messages = chatMemory.get(chatId, Integer.MAX_VALUE);

        // 如果获取到的 messages 列表为 null，则返回一个空的 List。
        if (messages == null) {
            return List.of();
        }

        // 将 messages 列表中的每个 Message 对象转换为 MessageVO 对象，并返回转换后的列表。
        return messages.stream().map(MessageVO::new).toList();
    }

}
